# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager as fm
import os

# 设置中文字体，确保图形中的中文可以正常显示
font_path = 'fonts/SIMSUN.TTC'  # 请确保这个路径是正确的，并且文件存在
prop = fm.FontProperties(fname=font_path)

plt.rcParams['axes.unicode_minus'] = False  # 解决负号 '-' 显示为方块的问题
plt.rcParams['font.family'] = prop.get_name()

# 定义输入数据
data = {
    '月份': ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
    '毛衣交易指数_2020': [9858234, 6157609, 5241538, 2471867, 1302714, 1380613, 1947378, 4866866, 8092835, 12680341, 12297627, 10768949],
    '毛衣交易指数_2021': [10336604, 5317733, 4776542, 2586766, 1366217, 1527458, 2487629, 4964457, 9129142, 14093232, 13617667, 11027451]
}

# 创建DataFrame
df_growth = pd.DataFrame(data)
df_growth['日期'] = pd.to_datetime(df_growth['月份'], format='%m月')

# 计算同比增长率
df_growth['同比增长率'] = ((df_growth['毛衣交易指数_2021'] - df_growth['毛衣交易指数_2020']) / df_growth['毛衣交易指数_2020']).round(2) * 100  # 转换为百分比并保留两位小数

# 创建组合图表
fig, ax1 = plt.subplots(figsize=(14, 7))

# 绘制折线图（交易指数）
ax1.plot(df_growth['日期'], df_growth['毛衣交易指数_2021'], label='2021年交易指数', marker='o', color='b')
ax1.set_ylabel('交易指数', color='b', fontproperties=prop)
ax1.tick_params(axis='y', labelcolor='b')

# 创建第二个Y轴用于柱状图（同比增长率）
ax2 = ax1.twinx()
ax2.bar(df_growth['日期'], df_growth['同比增长率'], label='同比增长率', alpha=0.5, color='r')
ax2.set_ylabel('同比增长率 (%)', color='r', fontproperties=prop)
ax2.tick_params(axis='y', labelcolor='r')

# 添加标题和X轴标签
plt.title('女装毛衣2021年市场增长率及销售趋势', fontproperties=prop)
plt.xlabel('日期', fontproperties=prop)
plt.xticks(rotation=45, fontproperties=prop)  # 旋转X轴标签以便阅读

# 显示图例
lines, labels = ax1.get_legend_handles_labels()
bars, bar_labels = ax2.get_legend_handles_labels()
ax2.legend(lines + bars, labels + bar_labels, loc='upper left', prop=prop)

# 保存图表
output_dir = 'data/11/output'
os.makedirs(output_dir, exist_ok=True)
output_chart_path = os.path.join(output_dir, 'market_trend_analysis.png')
plt.tight_layout()
plt.savefig(output_chart_path)

# 显示图表
plt.show()

# 输出含有组合图的表格文件
output_file_path = os.path.join(output_dir, 'market_trend_analysis_with_chart.xlsx')
with pd.ExcelWriter(output_file_path, engine='openpyxl') as writer:
    df_growth.to_excel(writer, sheet_name='Data', index=False)

print(f"图表已保存为: {output_chart_path}")
print(f"数据表已保存为: {output_file_path}")